package SortAlgorithm;

/**
 * @author gao
 * @date 2025/11/7 16:54
 */

public class BubbleSort implements Sort {

    /**
     *  冒泡排序算法的实现
     * @param nums 需要排序的整数数组
     */
    @Override
    public void sort(int[] nums) {
        int n = nums.length;

        // 外层循环控制排序的轮数，最多需要进行n-1轮
        for (int i = 0; i < n - 1; i++) {
            // 设置一个标志位，用于判断这一轮是否发生了交换
            boolean flg = false;

            // 内层循环控制每一轮比较的次数
            for (int j = 0; j < n - 1 - i; j++) {
                if (nums[j] > nums[j + 1]) {
                    swap(nums, j, j + 1);
                    flg = true;
                }
            }
            // 如果这一轮没有发生交换，说明数组已经有序，可以提前结束排序
            if (!flg) {
                break;
            }
        }
    }

    private void swap(int[] nums, int j, int i) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
}